13wk-2 draft

지리정보시각화
plotly
Author

최규빈

Published

November 30, 2022

Choropleth– plotly 공식예제, 한국의 인구수

Import

import pandas as pd 
import json 
import requests 
import plotly.express as px

plotly 공식예제

data

df = px.data.election()
geojson = px.data.election_geojson()

- df는 어떻게 생겼을까?

df.head()
district Coderre Bergeron Joly total winner result district_id
0 101-Bois-de-Liesse 2481 1829 3024 7334 Joly plurality 101
1 102-Cap-Saint-Jacques 2525 1163 2675 6363 Joly plurality 102
2 11-Sault-au-Récollet 3348 2770 2532 8650 Coderre plurality 11
3 111-Mile-End 1734 4782 2514 9030 Bergeron majority 111
4 112-DeLorimier 1770 5933 3044 10747 Bergeron majority 112

- geojson은 어떻게 생겼을까?

geojson.keys()
dict_keys(['type', 'features'])
geojson['features'][0].keys()
dict_keys(['type', 'geometry', 'properties', 'id'])
[geojson['features'][i]['properties'] for i in range(5)]
[{'district': '11-Sault-au-Récollet'},
 {'district': '12-Saint-Sulpice'},
 {'district': '13-Ahuntsic'},
 {'district': '14-Bordeaux-Cartierville'},
 {'district': '21-Ouest'}]
[geojson['features'][i]['id'] for i in range(5)]
['11', '12', '13', '14', '21']

시각화예시1: 공식예제 코드 그대로

fig = px.choropleth_mapbox(data_frame= df, 
                           geojson=geojson, 
                           color="Bergeron",
                           locations="district", 
                           featureidkey="properties.district",
                           center={"lat": 45.5517, "lon": -73.7073},
                           mapbox_style="carto-positron",
                           zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show(config=dict({'scrollZoom':False}))

시각화예시2: key를 변경

fig = px.choropleth_mapbox(data_frame= df, 
                           geojson=geojson, 
                           color="Bergeron",
                           locations="district_id", 
                           featureidkey="id",
                           center={"lat": 45.5517, "lon": -73.7073},
                           mapbox_style="carto-positron",
                           zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show(config=dict({'scrollZoom':False}))

한국의 인구수

df=pd.read_csv('https://raw.githubusercontent.com/guebin/2021DV/master/_notebooks/2021-11-22-prov.csv')
df
행정구역(시군구)별 총인구수 (명)
0 서울특별시 9532428
1 부산광역시 3356311
2 대구광역시 2390721
3 인천광역시 2945009
4 광주광역시 1442454
5 대전광역시 1454228
6 울산광역시 1122566
7 세종특별자치시 368276
8 경기도 13549577
9 강원도 1537717
10 충청북도 1596948
11 충청남도 2118977
12 전라북도 1789770
13 전라남도 1834653
14 경상북도 2627925
15 경상남도 3318161
16 제주특별자치도 676569
global_distriction_jsonurl='https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json'
global_dict = json.loads(requests.get(global_distriction_jsonurl).text)
fig = px.choropleth_mapbox(df,  ### 데이터프레임 
                           geojson=global_dict, ### json파일 
                           color="총인구수 (명)", ### df에서 코로플레스의 단계를 표시 
                           locations="행정구역(시군구)별", ### df에 존재하는 연결변수 
                           featureidkey="properties.name", ### json에 존재하는 연결매개체
                           center={"lat": 35.84195368311022, "lon": 127.1155556693179}, 
                           mapbox_style="carto-positron", 
                           zoom=5)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show(config=dict({'scrollZoom':False}))
# df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv')
# df = df.assign(Year = list(map(lambda x: x.split('/')[-1], df.Date)))\
#         .assign(Year = lambda df: list(map(lambda x: x.split('-')[0] ,df.Year)))
# import plotly.express as px
# fig = px.density_mapbox(df, 
#                         lat='Latitude', 
#                         lon='Longitude', 
#                         z='Magnitude', 
#                         radius=10,
#                         animation_frame='Year',
#                         center=dict(lat=37, lon=127), zoom=3,
#                         mapbox_style="stamen-terrain")
# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
# fig.show()

숙제

없음